﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using CrystalDecisions.CrystalReports.Engine;
using CrystalDecisions.Shared;
using TCC_Hotel.Serviços.BDServices;
using TCC_Hotel.Entidades;
using System.Configuration;

namespace TCC_Hotel.Apresentacao.FluxoHospedesAgora
{
    public partial class ExibirContaAntigos : System.Web.UI.Page
    {
        //Objeto do CrystalReports
        private ReportDocument report = new ReportDocument();
        FluxoHospedesService fluxo_servico = new FluxoHospedesService();

        /// <summary>
        /// Carregamento da página
        /// </summary>        
        protected void Page_Load(object sender, EventArgs e)
        {
            //Recupera o usuario corrente
            string usuario = Request.ServerVariables["AUTH_USER"].ToString();
            LoginService servico_Login = new LoginService();
            //Verifica permissao ao acesso da página
            if (!servico_Login.RecuperarPermissaoCache(usuario).Hospedes_Antigos)
            {
                //Redireciona para a pagina inicial
                Response.Redirect("~/");
            }

            //Se nao vier parametro, redireciona o usuario para a tela inicial
            if (Request.Params["apartamento"] == null || Request.Params["id"] == null)
            {
                //Redireciona para a pagina inicial
                Response.Redirect("~/");
            }

            //Recupera os parametros da URL
            int apartamento = Convert.ToInt32(Request.Params["apartamento"]);
            int ID_Reserva = Convert.ToInt32(Request.Params["id"]);
            
            Fluxo_Hospedes fluxo = fluxo_servico.RecuperarDetalhesFluxoHospede(ID_Reserva);

            //Carrega o relatório elaborado
            report.Load(Server.MapPath("CrystalReportContaAntigos.rpt"));
            

            report.SetParameterValue("ID_Reserva", ID_Reserva);
            report.SetParameterValue("Apartamento", apartamento);
            report.SetParameterValue("CheckIn", fluxo.Data_Entrada.ToString());
            report.SetParameterValue("CheckOut", fluxo.Data_Saida.ToString());
            report.SetParameterValue("CheckInReserva", fluxo.Data_Reserva_Entrada.ToString().Substring(0,10));
            report.SetParameterValue("CheckOutReserva", fluxo.Data_Reserva_Saida.ToString().Substring(0, 10));

            //Faz loggin no CrystalReports
            LogginCrystalReports(report);

            CrystalReportViewerConta.ReportSource = report;
        }


        /// <summary>
        /// Método que faz o login no CrystalReports
        /// </summary>       
        /// <param name="ArquivoReport">Reletório que ser afeito o loggin</param>
        private void LogginCrystalReports(ReportDocument ArquivoReport)
        {
            //Dados para Autenticação do CrystalReports  
            ConnectionInfo connectionInfo = new ConnectionInfo();
            connectionInfo.ServerName = ConfigurationManager.AppSettings["ServerName-Crystal"];
            connectionInfo.DatabaseName = ConfigurationManager.AppSettings["DatabaseName-Crystal"];
            connectionInfo.UserID = ConfigurationManager.AppSettings["UserID-Crystal"];
            connectionInfo.Password = ConfigurationManager.AppSettings["Password-Crystal"];

            //Faz o loggin com as informações passadas acima
            Tables tables = ArquivoReport.Database.Tables;            
            TableLogOnInfo tableLogonInfo = tables[0].LogOnInfo;
            tableLogonInfo.ConnectionInfo = connectionInfo;
            tables[0].ApplyLogOnInfo(tableLogonInfo);
            
        }

    }
}